# 1、装饰器的定义
# 就是给已有函数增加额外功能的函数，它本质上就是一个闭包函数。
# 装饰器的功能特点:
# 1. 不修改已有函数的源代码
# 2. 不修改已有函数的调用方式
# 3. 给已有函数增加额外的功能
# 装饰器的使用：
# Python给提供了一个装饰函数更加简单的用法：@装饰器名字；可以完成对已有函数的装饰。

# 案例：不修改评论功能的代码，在评论之前加登录装饰器。
# def login(func):
#     print('装饰器开始执行')
#
#     def inner():
#         print('检查是否登陆了， 如果没有，则登陆')  # 这个案例，func 实际上就是comment（）评论功能的函数。
#         func()
#
#     return inner
#
#
# def comment():
#     print('发布评论')
#
#
# comm = login(comment)
# comm()

login_flag = True # 测试开关是否登录

# 如上写法的第二种写法。
def login(func):
    print('装饰器开始执行')

    def inner():
        print('检查是否登陆了， 如果没有，则登陆')  # 这个案例，func 实际上就是comment（）评论功能的函数。
        func()


    return inner

@login # 这个注解就是 装饰器代码。
def comment():
    print('发布评论')

comment()

#上述代码输出

# 装饰器开始执行
# 检查是否登陆了， 如果没有，则登陆
# 发布评论